From: Shannon Zhao Date: Thu, 29 Sep 2016 01:18:47 +0000 (-0700) Subject: tools/libxl: Add an unified configuration option for ACPI X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~259 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22man:///%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22man:/?a=commitdiff_plain;h=3793f58a084b8fb617a2d8fa87d99ef56436294d;p=xen.git tools/libxl: Add an unified configuration option for ACPI Since the existing configuration option "u.hvm.acpi" is x86 specific and we want to reuse it on ARM as well, add a unified option "acpi" for x86 and ARM, and for ARM it's disabled by default. Signed-off-by: Shannon Zhao Acked-by: Wei Liu --- diff --git a/docs/man/xl.cfg.pod.5.in b/docs/man/xl.cfg.pod.5.in index d8108e3bbb..21b58bc21e 100644 --- a/docs/man/xl.cfg.pod.5.in +++ b/docs/man/xl.cfg.pod.5.in @@ -1249,6 +1249,7 @@ the virtual firmware to the guest Operating System. ACPI is required by most modern guest Operating Systems. This option is enabled by default and usually you should omit it. However it may be necessary to disable ACPI for compatibility with some guest Operating Systems. +This option is true for x86 while it's false for ARM by default. =item B diff --git a/tools/libxl/libxl_arch.h b/tools/libxl/libxl_arch.h index b35f7b6e84..fff05548ef 100644 --- a/tools/libxl/libxl_arch.h +++ b/tools/libxl/libxl_arch.h @@ -62,6 +62,10 @@ int libxl__arch_domain_construct_memmap(libxl__gc *gc, uint32_t domid, struct xc_dom_image *dom); +_hidden +void libxl__arch_domain_build_info_acpi_setdefault( + libxl_domain_build_info *b_info); + #if defined(__i386__) || defined(__x86_64__) #define LAPIC_BASE_ADDRESS 0xfee00000 diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c index bd3d6116fe..8ec5cd562b 100644 --- a/tools/libxl/libxl_arm.c +++ b/tools/libxl/libxl_arm.c @@ -985,6 +985,12 @@ int libxl__arch_domain_construct_memmap(libxl__gc *gc, return 0; } +void libxl__arch_domain_build_info_acpi_setdefault( + libxl_domain_build_info *b_info) +{ + libxl_defbool_setdefault(&b_info->acpi, false); +} + /* * Local variables: * mode: C diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 07b2b4b243..d986cd277b 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -215,6 +215,8 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, if (!b_info->event_channels) b_info->event_channels = 1023; + libxl__arch_domain_build_info_acpi_setdefault(b_info); + switch (b_info->type) { case LIBXL_DOMAIN_TYPE_HVM: if (b_info->shadow_memkb == LIBXL_MEMKB_DEFAULT) @@ -454,7 +456,7 @@ int libxl__domain_build(libxl__gc *gc, localents = libxl__calloc(gc, 9, sizeof(char *)); i = 0; localents[i++] = "platform/acpi"; - localents[i++] = libxl_defbool_val(info->u.hvm.acpi) ? "1" : "0"; + localents[i++] = libxl__acpi_defbool_val(info) ? "1" : "0"; localents[i++] = "platform/acpi_s3"; localents[i++] = libxl_defbool_val(info->u.hvm.acpi_s3) ? "1" : "0"; localents[i++] = "platform/acpi_s4"; diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index e3bf28fc11..ad366a8cd3 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -583,7 +583,7 @@ static int libxl__build_device_model_args_old(libxl__gc *gc, if (b_info->u.hvm.soundhw) { flexarray_vappend(dm_args, "-soundhw", b_info->u.hvm.soundhw, NULL); } - if (libxl_defbool_val(b_info->u.hvm.acpi)) { + if (libxl__acpi_defbool_val(b_info)) { flexarray_append(dm_args, "-acpi"); } if (b_info->max_vcpus > 1) { @@ -1204,7 +1204,7 @@ static int libxl__build_device_model_args_new(libxl__gc *gc, if (b_info->u.hvm.soundhw) { flexarray_vappend(dm_args, "-soundhw", b_info->u.hvm.soundhw, NULL); } - if (!libxl_defbool_val(b_info->u.hvm.acpi)) { + if (!libxl__acpi_defbool_val(b_info)) { flexarray_append(dm_args, "-no-acpi"); } if (b_info->max_vcpus > 1) { diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index a8fb23ef81..f1ba473590 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -4292,6 +4292,12 @@ _hidden int libxl__read_sysfs_file_contents(libxl__gc *gc, #define LIBXL_QEMU_USER_PREFIX "xen-qemuuser" #define LIBXL_QEMU_USER_BASE LIBXL_QEMU_USER_PREFIX"-domid" #define LIBXL_QEMU_USER_SHARED LIBXL_QEMU_USER_PREFIX"-shared" + +static inline bool libxl__acpi_defbool_val(const libxl_domain_build_info *b_info) +{ + return libxl_defbool_val(b_info->acpi) && + libxl_defbool_val(b_info->u.hvm.acpi); +} #endif /* diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 98bfc3adbc..a02446f005 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -494,11 +494,15 @@ libxl_domain_build_info = Struct("domain_build_info",[ # Note that the partial device tree should avoid to use the phandle # 65000 which is reserved by the toolstack. ("device_tree", string), + ("acpi", libxl_defbool), ("u", KeyedUnion(None, libxl_domain_type, "type", [("hvm", Struct(None, [("firmware", string), ("bios", libxl_bios_type), ("pae", libxl_defbool), ("apic", libxl_defbool), + # The following acpi field is deprecated. + # Please use the unified acpi field above + # which works for both x86 and ARM. ("acpi", libxl_defbool), ("acpi_s3", libxl_defbool), ("acpi_s4", libxl_defbool), diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c index 0190baa8a7..84493df8ef 100644 --- a/tools/libxl/libxl_x86.c +++ b/tools/libxl/libxl_x86.c @@ -573,6 +573,12 @@ out: return rc; } +void libxl__arch_domain_build_info_acpi_setdefault( + libxl_domain_build_info *b_info) +{ + libxl_defbool_setdefault(&b_info->acpi, true); +} + /* * Local variables: * mode: C diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index cb43c00177..1e93b1b03c 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -1550,6 +1550,7 @@ static void parse_config_data(const char *config_source, b_info->cmdline = parse_cmdline(config); xlu_cfg_get_defbool(config, "driver_domain", &c_info->driver_domain, 0); + xlu_cfg_get_defbool(config, "acpi", &b_info->acpi, 0); switch(b_info->type) { case LIBXL_DOMAIN_TYPE_HVM: @@ -1579,7 +1580,6 @@ static void parse_config_data(const char *config_source, xlu_cfg_get_defbool(config, "pae", &b_info->u.hvm.pae, 0); xlu_cfg_get_defbool(config, "apic", &b_info->u.hvm.apic, 0); - xlu_cfg_get_defbool(config, "acpi", &b_info->u.hvm.acpi, 0); xlu_cfg_get_defbool(config, "acpi_s3", &b_info->u.hvm.acpi_s3, 0); xlu_cfg_get_defbool(config, "acpi_s4", &b_info->u.hvm.acpi_s4, 0); xlu_cfg_get_defbool(config, "nx", &b_info->u.hvm.nx, 0);